package com.mrjy.coursepackage.dao;

import com.mrjy.common.entity.CoursePackageInfo;
import com.mrjy.common.entity.UserInfo;
import com.mrjy.common.entity.UserTest;
import com.mrjy.coursepackage.dto.CoursePackageInfoDTO;
import com.mrjy.custom.dto.CustomModuleDto;
import com.mrjy.queries.dto.CourseDTO;

import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * CoursePackageInfoDAO接口
 * <br>
 * <b>功能：</b>CoursePackageInfoDao<br>
 */
public interface ICoursePackageInfoDao {
	/**
	 * 新增
	 * @param info
	 * @return
	 */
	public Integer insert(CoursePackageInfo info);
	/**
	 * 全部修改，不管值是否为空
	 * @param info
	 * @return
	 */
	public Integer update(CoursePackageInfo info);
	/**
	 * 只修改不为空的值
	 * @param info
	 * @return
	 */
	public Integer updateById(CoursePackageInfo info);
	/**
	 * 删除
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
	/**
	 * 通过id查询数据
	 * @param dto
	 * @return
	 */
	public CoursePackageInfoDTO selectById(CoursePackageInfoDTO dto);
	/**
	 * 查询list
	 * @param info
	 * @return
	 */
	public List<CoursePackageInfo> selectPageByEntity(CoursePackageInfo info);
	/**
	 * 通过id和类型来查询导师课程包
	 * @param info info.id 课程包id 
	 * @return
	 */
	public CoursePackageInfoDTO selectTeacherPackageByIdAndType(CoursePackageInfo packageInfo);
	/**
	 * 通过id和类型来查询主题课程包
	 * @param info info.id 课程包id  
	 * @return
	 */
	public CoursePackageInfoDTO selectThemePackageByIdAndType(CoursePackageInfo packageInfo);
	/**
	 * 通过id查询视频标签
	 * @param id
	 * @return
	 */
	public List<CoursePackageInfoDTO> selectVideoTypeById(Integer id);
	/**
	 * 主题课程包页 通过id查询导师的头像
	 * @param id
	 * @return
	 */
	public List<CoursePackageInfoDTO> selectTeacherHeadImgById(Integer id);
	/**
	 * 通过用户id，分页信息查询我得课程
	 * @param info
	 * @return
	 */
	public List<CoursePackageInfoDTO> selectNoVipMyCoursePackageByUserId(CoursePackageInfo info);
	
	/**
	 * 通过用户id，分页信息查询我得课程
	 * @param info
	 * @return
	 */
	public List<CoursePackageInfoDTO> selectVipMyCoursePackageByUserId(CoursePackageInfo info);
	/**
	 * 根据课程包类型查询 导师包列表或主题包列表
	 * @param info info.coursePackageType  0:主题课程包;1:导师课程包 ，info.page info.rows
	 * @return
	 */
	public List<CoursePackageInfoDTO> selectPageByCoursePackageType(CoursePackageInfo info);
	/**
	 * 通过课程包id查询其包含的视频，支持分页查询
	 * @param info info.id , info.page, info.rows
	 * @return
	 */
	public List<CoursePackageInfoDTO> selectVideoListById(CoursePackageInfo info);
	
	public Object deleteByIds(int[] ids);
	
	public Integer updateDisableFlag(CoursePackageInfo info);
	
	public List<CoursePackageInfoDTO> selectPageByCoursePackageTypeForBack(CoursePackageInfo info);
	
	public int selectCountByCoursePackageTypeForBack(CoursePackageInfo info);

    public List<CoursePackageInfoDTO> queryAllTeacherPackage(CoursePackageInfo info);

    public List<CoursePackageInfoDTO> queryAllThemePackage(Integer userId);
	public List<CoursePackageInfoDTO> queryByVideoType(CoursePackageInfoDTO info);
	public List<CoursePackageInfoDTO> queryByVideoType2(CoursePackageInfoDTO info);
	public double queryCompletionByVideoType(CoursePackageInfoDTO info);
	public List<CoursePackageInfoDTO> queryCpByTestResult(UserTest userTest);
	public List<CoursePackageInfoDTO> queryMSPackageByTeacherId(@Param("teacherId")Integer teacherId);
	public List<Object> queryStageTabInfo();

    CoursePackageInfoDTO selectVideoInfoByUserId(CoursePackageInfo info);
	public List<CoursePackageInfoDTO> queryListForImportSolr(CoursePackageInfo info);
	public List<CoursePackageInfoDTO> queryPageByCustomType(CoursePackageInfoDTO info);

    int selectCountNoVipMyCoursePackageByUserId(Integer userId);

    int selectCountVipMyCoursePackageByUserId(Integer userId);

    List<CoursePackageInfoDTO> queryCourseByCustomType(CustomModuleDto coursePackageInfoDTO);

	public CoursePackageInfo queryBelongSpecialCP(Integer videoId);
	
	public List<CoursePackageInfoDTO> queryList(CoursePackageInfo coursePackageInfo);
	
	List<CourseDTO> queryPageByType(@Param("types") String types,@Param("userId") Integer userId);

    List<CoursePackageInfoDTO> queryCourseByCustomModuleId(CoursePackageInfo info);

    List<CoursePackageInfoDTO> selectUnFinishVideoListById(CoursePackageInfo info);

    int countPageByCustomType(CoursePackageInfoDTO dto);

    List<UserInfo> queryCourseUser(Integer coursepackageId);

    int countCourseUser(Integer id);
}
